/*
 * Функция проверки формы. Для проверки используется плагин Validator к jQuery.
 * 
 * @param string formName  Имя формы, которую необоходимо проверить
 * @return void
 */
function checkForm(formName) {
    $("#" + formName).validate();
};


/*
 * Функция получения формы добавления запроса по AJAX
 * 
 * @param  integer trackerId  ID трекера
 * @return bool
 */
function getForm(trackerId) {
    $.ajax({
        type: 'POST',
        // Страницу будем получать в режиме ajax (без шапки и подвала страницы)
        url: 'index.php?page=get_form&ajax=1',
        data: 'trackerId=' + trackerId,
        // Перед получением данных скрываем форму
        beforeSend: function(){
            $('#_form').hide();
            $('#loadingdiv').show();
        },
        // После получения данных снова показываем форму
        complete: function(){
            $('#_form').show();
            $('#loadingdiv').hide();
        },
        // Если всё проиошло без ошибок, то показываем полученную форму
        success: function(msg) {
            $('#_form').html(msg);
        }
    });
    return false;
};


/*
 * Добавляет новую строку на форму добавления нового трекера
 * 
 * @param  string table  Таблица, в которую нужно добавить строку
 * @return void
 */
function addQuestionField(table) {
    // Получаем ID последнего элемента таблицы и добавляем к нему единицу
    var lastAttr = parseInt($('#' + table + ' tr').last().attr('id')) + 1;
    // Генерируем новую строку
    var str = '<tr id="' + lastAttr + '">' + 
    '<td>' + lastAttr + '</td>' + 
    '<td><input type="text" name="questions[question][' + lastAttr + ']" style="width: 100%;" class="required" /></td>' +
    '<td><input type="text" name="questions[maxChars][' + lastAttr + ']" style="width: 100%;" class="number"/></td>' +
    '<td><select name="questions[fieldType][' + lastAttr + ']" style="width: 100%;">' +
    '<option value="0">Текст</option>' +
    '<option value="1">Большое поле</option>' +
    '<option value="2">Поле для E-Mail адреса</option>' +
    '</select></td>' +
    '<td><input type="checkbox" name="questions[required][' + lastAttr + ']" checked="on" /></td>' +
    '<td><span style="color: red; text-decoration: none; font-weight: bold; cursor: pointer;" onclick="removeQuestionField(\'questions\', ' + lastAttr + ')">[x]</span></td>' + 
    '</td></tr>';
    // Дорисовываем новый элемент к таблице
    $('#' + table).last().append(str);
    // Ставим фокус на последний добавленный элемент
    $('#' + table + ' input[name^=questions[question]]:last').focus();
}


/*
 * Функция удаляем элемент с страницы
 * 
 * @param  string element  Элемент, который необохдимо удалить
 * @return void
 */
function removeQuestionField(table, element) {
    // Вычисляем текущее количество строк в таблице
    var rowCount = $('#' + table + ' tr').length - 1;
    // Если в таблице всего одна строка - предупреждаем об этом пользователя
    if (rowCount == 1) {
        alert('Вы не можете удалить последнее поле.\nПокурите и успокойтесь :)');
    // Если в таблице кроме этой остаётся ещё хоть одна строка - удаляем выбранную строку
    } else {
        $('#' + element).remove();
    }
}


/*
 * Функция добавляет инвайты и выводит новое количество на страницу
 * 
 * @param  integer id   ID трекера, к которому необохдимо добавить инвайтов
 * @param  integer inc  Количество добавляемых инвайтов
 * @return bool
 */
function increaseInviteCount(id, inc) {
    $.ajax({
        type: 'POST',
        // Страницу будем получать в режиме ajax (без шапки и подвала страницы)
        url: 'index.php?page=ajax&action=set_invite_count&ajax=1',
        data: 'id=' + id + '&current=' + $('#trac' + id).text() + '&inc=' + inc,
        // Если ошибок не произошло - отображаем новое количество инвайтов вместо старого
        success: function(msg) {
            $('#trac' + id).html(msg);
        }
    });
    return false;
};


/*
 * Функция отнимает инвайты и выводит новое количество на страницу
 * 
 * @param  integer id   ID трекера, у которого необохдимо отнять инвайты
 * @param  integer inc  Количество отнимаемых инвайтов
 * @return bool
 */
function decreaseInviteCount(id, dec) {
    $.ajax({
        type: 'POST',
        // Страницу будем получать в режиме ajax (без шапки и подвала страницы)
        url: 'index.php?page=ajax&action=set_invite_count&ajax=1',
        data: 'id=' + id + '&current=' + $('#trac' + id).text() + '&dec=' + dec,
        // Если ошибок не произошло - отображаем новое количество инвайтов вместо старого
        success: function(msg) {
            $('#trac' + id).html(msg);
        }
    });
    return false;
};


/*
 * Функция удаляет запрос
 * 
 * @param  integer id   ID запроса, который требуется удалить
 * @return bool
 */
function deleteRequest(id) {
    var conf = confirm("Вы уверены что хотете удалить этот запрос");
    // Если пользователь уверен в своём действии ;)
    if (conf) {
        $.ajax({
            type: 'POST',
            // Страницу будем получать в режиме ajax (без шапки и подвала страницы)
            url: 'index.php?page=ajax&action=delete_request&ajax=1',
            data: 'id=' + id,
            // Если ошибок не произошло - отображаем новое количество инвайтов вместо старого
            success: function(msg) {
                // Обрисую ситуацию: некоторые хостинговые компании добавляют свой код
                // на HTML страницы. Поэтому в результате AJAX-запроса в ответе мы может
                // получить не просто 'ok', а ещё и некоторое количество разной ненужной
                // <s>рекламы</s> информации. Чтобы избежать подобных случаев, обрежем ответ
                // до двух символом и сверим
                if (msg.substr(0, 2) == 'ok') {
                    // Плавно скрываем элемент таблицы, так как теперь он на*уй не нужен
                    var rowId = $('#row' + id);
                    // "Внезапно" оказалось, что IE и опера имеют ограничения по работе с TR
                    // элементами. Пришлось писать хак, т.к. уже оень хочется чтобы всё было
                    // красиво и качественно. Шучу.
                    rowId.find('td').fadeOut(400, function() {
                        $(this).parent().remove();
                    });
                } else {
                    // Если при удалении произошли ошибки - выводим об этом сообщение
                    alert(msg);
                }
            }
        });
    return false;
    }
};


/*
 * Функция обновляет статус запроса
 * 
 * @param  string  secret      Секретный код запроса, которому необходимо обновить статус
 * @param  mixed   statusType  Отправляемый AJAX-запросом текст
 * @return bool
 */
function updateStatus(secret, statusType) {
    // Если мы обновляем основной статус
    if (statusType == 'status') {
        var statusVar = $('#_statusSelector').val();
    // Если мы обновляем статусное сообщение
    } else if (statusType == 'additionalStatus') {
        var statusVar = $('#_additionalStatus').val();
    }
    // Далее отправляем AJAX запрос на сервер
    $.ajax({
        type: 'POST',
        url: 'index.php?page=ajax&action=update_status&ajax=1',
        data: 'secret=' + secret + '&status=' + statusVar + '&statusType=' + statusType,
        success: function(msg) {
            // Если мы обновляем основной статус
            if (statusType == 'status') {
                $('#statusInfo').html(msg);
            // Если мы обновляем статусное сообщение
            } else if (statusType == 'additionalStatus') {
                $('#additionalStatus').html(msg);
            }
        }
    });
    return false;
};


/*
 * Функция блокировки IP-адреса
 * 
 * @param  int  ipLong  IP адрес в виде числа
 * @return void
 */
function banIP(ipLong) {
    var reason = prompt('Укажите причину блокировки IP-адреса');
    $.ajax({
        type: 'POST',
        url: 'index.php?page=ajax&action=ban_ip&ajax=1',
        data: 'ip=' + ipLong + '&reason=' + reason,
        success: function(msg) {
            // Заменяем текст с IP адресом на новый текст ;)
            $('.' + ipLong).empty().append('IP был забанен');
        }
    });
}


function deleteTracker(id) {
    var confirmText = 'Вы уверены что хотете удалить этот трекер?\nВы также можете установить '  +
    'количество инвайтов равное нулю и тогда этот трекер не будет отбражаться в списке трекеров' + 
    'до того как вы не установите количество инвайтов, отличное от нуля.';
    var conf = confirm(confirmText);
    if (conf) {
        $.ajax({
            type: 'POST',
            url: 'index.php?page=ajax&action=delete_tracker&ajax=1',
            data: 'id=' + id,
            success: function(msg) {
                alert('Трекер с ID ' + id + ' был успешно удалён');
            }
        });
    } else {
        alert ('Запрос на удаление был отменён');
    }
}